// -*-c++-*- osgCairo - Copyright (C) 2010 Jeremy Moles
// $Id$

#ifndef OSGCAIRO_PATTERN
#define OSGCAIRO_PATTERN

#include <osg/Referenced>
#include <osgCairo/Types>

namespace osgCairo {

class OSGCAIRO_EXPORT Pattern: public osg::Referenced {
protected:
	CairoPattern* _pattern;
	
	Pattern(CairoPattern* = 0);

public:
	~Pattern ();

	CairoPattern* getPattern();
	
	// The functions that will happen later are:
	// - setMatrix
	// - getMatrix

	void addColorStopRGBA (double, double, double, double, double=1.0f);
	void setExtend        (CairoExtend);
	void setFilter        (CairoFilter);
	
	CairoStatus status    ();
	CairoExtend getExtend ();
	CairoFilter getFilter ();
};

class OSGCAIRO_EXPORT SolidPattern : public Pattern {
public:
	SolidPattern(double, double, double, double=1.0f);
};

class OSGCAIRO_EXPORT SurfacePattern : public Pattern {
public:
	SurfacePattern(CairoSurface*);
};

class OSGCAIRO_EXPORT LinearPattern : public Pattern {
public:
	LinearPattern(double, double, double, double);
};

class OSGCAIRO_EXPORT RadialPattern : public Pattern {
public:
	RadialPattern(double, double, double, double, double, double);
};

}

#endif
